9428a852a98925ed5bf8a5f6b99bfad136054210,src/main/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java,EqualsAndHashCodeASTTransformation,createEquals,#ClassNode#boolean#boolean#boolean#List#,151
Before Change
List<PropertyNode> pList = getInstanceProperties(cNode);
for (PropertyNode pNode : pList) {
if (excludes.contains(pNode.getName()) || pNode.getName().contains("$")) continue;
body.addStatement(returnFalseIfPropertyNotEqual(pNode, other));
}
List<FieldNode> fList = new ArrayList<FieldNode>();
if (includeFields) {
fList.addAll(getInstanceNonPropertyFields(cNode));
}
for (FieldNode fNode : fList) {
if (excludes.contains(fNode.getName()) || fNode.getName().contains("$")) continue;
body.addStatement(returnFalseIfFieldNotEqual(fNode, other));
}
if (callSuper) {
After Change
}
public static void createEquals(ClassNode cNode, boolean includeFields, boolean callSuper, boolean useCanEqual, List<String> excludes, List<String> includes) {
if (useCanEqual) createCanEqual(cNode);
// make a public method if none exists otherwise try a private method with leading underscore
boolean hasExistingEquals = hasDeclaredMethod(cNode, "equals", 1);
if (hasExistingEquals && hasDeclaredMethod(cNode, "_equals", 1)) return;
final BlockStatement body = new BlockStatement();
VariableExpression other = new VariableExpression("other");
// some short circuit cases for efficiency
body.addStatement(returnFalseIfNull(other));
body.addStatement(returnTrueIfIdentical(VariableExpression.THIS_EXPRESSION, other));
if (useCanEqual) {
body.addStatement(returnFalseIfNotInstanceof(cNode, other));
body.addStatement(new IfStatement(
new BooleanExpression(new MethodCallExpression(other, "canEqual", VariableExpression.THIS_EXPRESSION)),
new EmptyStatement(),
new ReturnStatement(ConstantExpression.FALSE)
));
} else {
body.addStatement(returnFalseIfWrongType(cNode, other));
}
// body.addStatement(new ExpressionStatement(new BinaryExpression(other, ASSIGN, new CastExpression(cNode, other))));
List<PropertyNode> pList = getInstanceProperties(cNode);
for (PropertyNode pNode : pList) {
if (shouldSkip(pNode.getName(), excludes, includes)) continue;
body.addStatement(returnFalseIfPropertyNotEqual(pNode, other));
}
List<FieldNode> fList = new ArrayList<FieldNode>();
if (includeFields) {
fList.addAll(getInstanceNonPropertyFields(cNode));
}
for (FieldNode fNode : fList) {
if (shouldSkip(fNode.getName(), excludes, includes)) continue;
body.addStatement(returnFalseIfFieldNotEqual(fNode, other));
}
if (callSuper) {